package com.yumi.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;

import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 员工实体类
 */
@Data
@TableName("employee")
public class Employee {
    
    /**
     * 员工ID
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 员工姓名
     */
    @NotBlank(message = "员工姓名不能为空")
    @Size(max = 50, message = "员工姓名长度不能超过50个字符")
    private String name;

    /**
     * 员工年龄
     */
    @NotNull(message = "员工年龄不能为空")
    @Min(value = 18, message = "员工年龄必须在18岁以上")
    @Max(value = 60, message = "员工年龄必须在60岁以下")
    private Integer age;

    /**
     * 员工性别（1-男，2-女）
     */
    @NotNull(message = "员工性别不能为空")
    @Min(value = 1, message = "员工性别不正确")
    @Max(value = 2, message = "员工性别不正确")
    private Integer gender;

    /**
     * 入职时间
     */
    @NotNull(message = "入职时间不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime entryTime;

    /**
     * 所属部门
     */
    @NotBlank(message = "所属部门不能为空")
    @Size(max = 50, message = "所属部门长度不能超过50个字符")
    private String department;

    /**
     * 职位
     */
    @NotBlank(message = "职位不能为空")
    @Size(max = 50, message = "职位长度不能超过50个字符")
    private String position;

    /**
     * 工资
     */
    @NotNull(message = "工资不能为空")
    @DecimalMin(value = "3000", message = "工资不能低于3000")
    @DecimalMax(value = "50000", message = "工资不能超过50000")
    private BigDecimal salary;

    /**
     * 联系电话
     */
    @NotBlank(message = "联系电话不能为空")
    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
    private String phone;

    /**
     * 邮箱
     */
    @Email(message = "邮箱格式不正确")
    private String email;

    /**
     * 备注
     */
    @Size(max = 500, message = "备注长度不能超过500个字符")
    private String remark;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 是否删除（0-未删除，1-已删除）
     */
    @TableLogic
    private Integer deleted;
} 